(delete_kboard): Prevent a dangling reference
authorGerd Moellmann <gerd@gnu.org>
Thu, 19 Apr 2001 13:00:01 +0000 (13:00 +0000)
committerGerd Moellmann <gerd@gnu.org>
Thu, 19 Apr 2001 13:00:01 +0000 (13:00 +0000)
from current_kboard to KB, which is freed.

src/keyboard.c

index 1d984be4fcc52fbdde3c77ae8f482dfb8a21e5eb..a9dd324a381594c2b9265715cf138ff888851a05 100644 (file)
@@ -10013,19 +10013,33 @@ wipe_kboard (kb)
 }
 
 #ifdef MULTI_KBOARD
+
+/* Free KB and memory referenced from it.  */
+
 void
 delete_kboard (kb)
-  KBOARD *kb;
+     KBOARD *kb;
 {
   KBOARD **kbp;
+  
   for (kbp = &all_kboards; *kbp != kb; kbp = &(*kbp)->next_kboard)
     if (*kbp == NULL)
       abort ();
   *kbp = kb->next_kboard;
+
+  /* Prevent a dangling reference to KB.  */
+  if (kb == current_kboard)
+    {
+      current_kboard = SELECTED_FRAME ()->kboard;
+      if (current_kboard == kb)
+       abort ();
+    }
+  
   wipe_kboard (kb);
   xfree (kb);
 }
-#endif
+
+#endif /* MULTI_KBOARD */
 
 void
 init_keyboard ()